super

Доступность

Flash Player 6.

Синтаксис

super.method([arg1, ..., argN])
super([arg1, ..., argN])

Параметры

method Метод, вызываемый в суперклассе.

arg1 Дополнительные параметры, которые передаются методу суперкласса (синтаксис 1) или к функции конструктора суперкласса (синтаксис 2).

Возвращает

Обе формы вызывают функцию. Функция может возвращать любое значение.

Описание

Оператор: первый стиль синтаксиса может использоваться в пределах тела объектного метода для вызова метода суперкласса и может произвольно передавать параметры (arg1 ... argN) методу суперкласса. Это полезно для создания методов подкласса, которые добавляют дополнительное поведение к методам суперкласса, но также и вызывают методы суперкласса чтобы выполнить их первоначальное поведение.

Второй стиль синтаксиса может использоваться в пределах тела функции конструктора, чтобы вызвать функции конструктора суперкласса и может произвольно передавать параметры. Это полезно, чтобы создать подкласс, который выполняет дополнительную инициализацию, но также и вызывает конструктор суперкласса, чтобы исполнить инициализацию суперкласса.

Пример

В следующем примере, вы создаёте два класса. Вы используете ключевое слово super в классе Socks для вызова функций в родительском классе(Clothes). Хотя оба класса Socks и Clothes имеют метод getColor(), использование super позводяет вам определённо ссылаться на методы и свойства родительского класса. Создайте AS файл с именем Clothes.as, и введите следующий код :

class Clothes {
  private var color:String;
  function Clothes(param_color) {
    this.color = param_color;
    trace("[Clothes] I am the constructor");
  }
  function getColor():String {
    trace("[Clothes] I am getColor");
    return this.color;
  }
  function setColor(param_color:String):Void {
    this.color = param_color;
    trace("[Clothes] I am setColor");
  }
}

Далее создаётся класс Socks который расширяет класс Clothes, как показано в следующем примере :

class Socks extends Clothes {
  private var color:String;
  function Socks(param_color:String) {
    this.color = param_color;
    trace("[Socks] I am the constructor");
  }
  function getColor():String {
    trace("[Socks] I am getColor");
    return super.getColor();
  }
  function setColor(param_color:String):Void {
    this.color = param_color;
    trace("[Socks] I am setColor");
  }
}

Создайте новый AS или FLA файл и введите следующий ActionScript код :

import Socks;
var mySock:Socks = new Socks("maroon");
trace(" -> "+mySock.getColor());
mySock.setColor("Orange");
trace(" -> "+mySock.getColor());

Следующий результат выведется в панели Output :

[Clothes] I am the constructor
[Socks] I am the constructor
[Socks] I am getColor
[Clothes] I am getColor
-> maroon
[Socks] I am setColor
[Socks] I am getColor
[Clothes] I am getColor
-> Orange

Если вы забыли поместить ключевое слово super в метод getColor() класса Sock, и при вызове метода getColor() метод будет вызывать сам себя многократно, что преведёт к сбою работы кода из за возникающего бесконечного цикла.

Output панель выведет следующую ошибку если не использовать super :

[Socks] I am getColor
[Socks] I am getColor
...
[Socks] I am getColor
256 levels of recursion were exceeded in one action list.
This is probably an infinite loop.
Further execution of actions has been disabled in this movie.